import plotly.express as px
from sklearn.decomposition import PCA
import pandas as pd

# 加载 Iris 数据集
df = px.data.iris()

# 显示原始数据
print("原始数据集：")
print(df.head())
print("\n数据集信息：")
print(df.info())
print("\n数据集描述：")
print(df.describe())

# 特征和目标变量
X = df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
y = df['species']

# 使用 PCA 进行降维，从四维降到三维
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X)

# 将降维后的数据转换为 DataFrame
df_pca = pd.DataFrame(X_pca, columns=['PC1', 'PC2', 'PC3'])
df_pca['species'] = y

# 使用 Plotly 可视化三维数据
fig = px.scatter_3d(df_pca, x='PC1', y='PC2', z='PC3', color='species',
                    title='Iris 数据集降维到三维后的可视化',
                    labels={'PC1': '主成分 1', 'PC2': '主成分 2', 'PC3': '主成分 3'})

# 显示图形
fig.show()